<?php
namespace app\admin\controller;
use think\Controller;
use app\facade\WebTool;
use think\facade\Request;
use app\admin\model\AdminGroup as Group;

class AdminGroup extends Controller
{
	// 设置中间件 Check前置 用于进入的数据处理  Return后置 用于返回的数据处理
	protected $middleware =  ['AdminGroupCheck',];
	// 权限组 添加接口参数控制
	protected $addParam = ['title','status','note','rules'];
	// 权限组 编辑接口参数控制
	protected $editParam = ['id','title','status','note','rules'];
	// 权限组 获取接口参数控制
	protected $getParam = ['id'];
	
	public function list() { return view(); }
	public function add() { return view(); }
	public function edit() { return view(); }

	/**
	 * ParamDispose 参数进行提取处理
	 * @param array $array 允许访问的参数
	 * @param string $scene 提取场景
	 * @return  array 可用的请求参数
	 */
	private static function ParamDispose($array,$scene='')
	{
		// 请求参数获取
		$param = Request::param();
		// 场景执行
		switch ($scene)
		{
			// 如果场景是某种场景的判断
			case 'rules':
				// 循环参数内容
				foreach ($param as $key => $val)
				{
					// 删除不需要的参数
					if (!in_array($key, $array)) unset($param[$key]);
					// 对参数中的某个特定内容进行处理
					if ($key === 'rules') { $rules = implode(',', $val); }
				}
				// 进行参数记录
				$param['rules'] = $rules;
			break;	
			// 默认执行方案
			default:
				foreach ($param as $key => $val) { if (!in_array($key, $array)) unset($param[$key]); }
			break;
		}
		// 返回参数
		return $param;
	}

	/**
	 * listGroup权限组列表接口
	 * @return array 返回空数据或者权限组数据
	 */
	public function listGroup()
	{
		// 实例化权限组模型
		$group = new Group();
		// 在模型中进行查询
		$list = $group->groupList();
		// 如果为空的判断
		if (empty($list)) return ['code'=>1,'msg'=>'Group_List_Get_Empty','data'=>false];
		// 数据提取 提取page信息
		$data['page'] = $list->render();
		// 数据提取，提取数据列表信息
		$data['data'] = $list->toArray()['data'];
		// 返回查询后的数据
		return ['code'=>0,'msg'=>'Success','data'=>$data];
	}

	/**
	 * ruleGroup select 下拉接口
	 * @return array 返回空数据或者下拉列表数据
	 */
	public function ruleGroup()
	{
		// 实例化权限组模型
		$group = new Group();
		// 在模型中进行查询
		$data = $group->groupRule();
		// 如果为空的判断
		if (empty($data)) return ['code'=>1,'msg'=>'Rules_Select_Get_Empty','data'=>false];
		// 进行数据排序处理
		$data = WebTool::bubbleSort($data);
		// 返回查询后的数据
		return ['code'=>0,'msg'=>'Success','data'=>$data];
	}

	/**
	 * getGroup 获取用户组详细数据接口
	 * @return 返回空或者返回用户组详细数据
	 */
	public function getGroup()
	{
		// 实例化权限组模型
		$group = new Group();
		// 获取用户传入的参数
		$param = self::ParamDispose($this->getParam);
		// 进行请求信息验证
		$res = $this->validate($param,'AdminGroup.groupid');
		// 如果验证失败则返回错误信息
		if (true !== $res) return ['code'=>1,'msg'=>$res,'data'=>false];
		// 在模型中进行查询
		$data = $group->groupGet($param['id']);
		// 如果为空的判断
		if (empty($data)) return ['code'=>1,'msg'=>'Group_Detail_Empty','data'=>false];
		// 返回查询后的数据
		return ['code'=>0,'msg'=>'Seccess','data'=>$data];
	}

	/**
	 * addGroup 添加用户组接口
	 * @return 返回添加数据是否成功
	 */
	public function addGroup()
	{
		// 实例化权限组模型
		$group = new Group();
		// 获取用户传入的参数
		$param = self::ParamDispose($this->addParam,'rules');
		// 进行请求信息验证
		$res = $this->validate($param,'AdminGroup.groupadd');
		// 如果验证失败则返回错误信息
		if (true !== $res) return ['code'=>1,'msg'=>$res,'data'=>false];
		// 在模型中进行操作
		$res = $group->groupAdd($param);
		// 如果操作失败进行错误信息返回
		if (true !== $res) return ['code'=>1,'msg'=>'Group_Add_Error','data'=>false];
		// 操作成功返回数据
		return ['code'=>0,'msg'=>'Seccess','data'=>true];
	}

	/**
	 * editGroup 修改权限组组接口
	 * @return  返回修改数据是否成功
	 */
	public function editGroup()
	{
		// 实例化权限组模型
		$group = new Group();
		// 获取用户传入的参数
		$param = self::ParamDispose($this->editParam,'rules');
		// 进行请求信息验证
		$res = $this->validate($param,'AdminGroup.groupedit');
		// 如果验证失败则返回错误信息
		if (true !== $res) return ['code'=>1,'msg'=>$res,'data'=>false];
		// 在模型中进行操作
		$res = $group->groupEdit($param['id'],$param);
		// 如果操作失败进行错误信息返回
		if (true !== $res) return ['code'=>1,'msg'=>'Group_Edit_Error','data'=>false];
		// 操作成功返回数据
		return ['code'=>0,'msg'=>'Seccess','data'=>''];
	}

	/**
	 * delGroup 删除权限组数据
	 * @return 返回删除数据是否成功
	 */
	public function delGroup()
	{
		// 实例化权限组模型
		$group = new Group();
		// 获取用户传入的参数
		$param = self::ParamDispose($this->getParam);
		// 进行请求信息验证
		$res = $this->validate($param,'AdminGroup.groupid');
		// 如果验证失败则返回错误信息
		if (true !== $res) return ['code'=>1,'msg'=>$res,'data'=>false];
		// 在模型中进行操作
		$res = $group->groupDel($param['id']);
		// 如果操作失败进行错误信息返回
		if (true !== $res) return ['code'=>1,'msg'=>'Group_Del_Error','data'=>false];
		// 操作成功返回数据
		return ['code'=>0,'msg'=>'Seccess','data'=>true];
	}
}